//
// Created by LiuYou on 2021/5/13.
//

#include "Todo.hpp"

#include <utility>

Todo::Todo() = default;

Todo::Todo(std::string todo, std::string where) : todo(std::move(todo)), where(std::move(where)) {}

std::ostream& operator<<(std::ostream& os, const Todo& todo) {
    os << "todo: " << todo.todo << " where: " << todo.where;
    return os;
}

void Todo::setTodo(const std::string& todo) {
    Todo::todo = todo;
}

void Todo::setWhere(const std::string& where) {
    Todo::where = where;
}

bool operator==(const Todo& lhs, const Todo& rhs) {
    return lhs.todo == rhs.todo &&
           lhs.where == rhs.where;
}

bool operator!=(const Todo& lhs, const Todo& rhs) {
    return !(rhs == lhs);
}

bool operator<(const Todo& lhs, const Todo& rhs) {
    if (lhs.todo < rhs.todo)
        return true;
    if (rhs.todo < lhs.todo)
        return false;
    return lhs.where < rhs.where;
}

bool operator>(const Todo& lhs, const Todo& rhs) {
    return rhs < lhs;
}

bool operator<=(const Todo& lhs, const Todo& rhs) {
    return !(rhs < lhs);
}

bool operator>=(const Todo& lhs, const Todo& rhs) {
    return !(lhs < rhs);
}

Todo::~Todo() = default;
